package inmobiliariafrsf;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.view.JasperViewer;
import net.sf.jasperreports.engine.JasperCompileManager;

/**
 * Clase encargada de la comunicacion con iReport para
 * completar la informacion del reporte de catalogo de inmuebles
 * para su posterior compilacion y muestra en pantalla
 * 
 */
public class GenerarCatalogo {

    static Connection conn = null;
    
    /**
     * Creador de una instancia de la clase, la cual controla la comunicacion
     * con iReport, la conexion con la base de datos para las consultas internas
     * del reporte, y la informacion correspondiente al reporte
     * 
     * @param codigos               Vector de cadenas, las cuales son correspondientes
     *                              a los codigos de los inmuebles seleccionados
     *                              previamente para la realizacion del catalogo,
     *                              para luego poder obtener la informacion
     *                              detallada de los mismos
     * @param nombre_cliente        Cadena que contiene el nombre completo
     *                              del cliente que solicita el catalogo
     */
    public GenerarCatalogo(Vector<String> codigos, String nombre_cliente) {
        // Cargamos el driver JDBC
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("MySQL JDBC Driver not found.");
            System.exit(1);
        }

        try {
            conn = DriverManager.getConnection("jdbc:mysql://190.228.29.63:3306/metodos_agiles", "metodos_agiles", "metodos_agiles");
            conn.setAutoCommit(false);
        } catch (SQLException e) {
            System.out.println("Error de conexión: " + e.getMessage());
            JOptionPane.showMessageDialog(null, "No se pudo conectar a la base de datos para generar el catálogo.", "Error en la conexión a la base de datos.", JOptionPane.ERROR_MESSAGE);
        }

        try {
            Map parameters = new HashMap();
            parameters.put("NOMBRE_CLIENTE", nombre_cliente);
            
            String codigos_string = "(codigo = '" + codigos.get(0) + "'";
            
            for (int i = 1; i < codigos.size(); i++) {
                codigos_string += " OR codigo = '"+codigos.get(i)+"'";
            }
            
            codigos_string += ")";
            
            parameters.put("IDs", codigos_string);
            
            JasperReport report = JasperCompileManager.compileReport(System.getProperty("user.dir")+"\\Catalogo.jrxml");
            JasperPrint print = JasperFillManager.fillReport(report, parameters, conn);
            System.out.println("Query reporte: "+report.getQuery().getText());
            System.out.println("Codigos string: "+codigos_string);
            //Para visualizar el pdf directamente desde java
            JasperViewer jviewer = new JasperViewer(print, false);
            jviewer.setTitle("Catalogo para "+nombre_cliente);
            //jviewer.setIconImage(new ImageIcon("doc_table.png").getImage());
            jviewer.setVisible(true);
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            /*
             * Cleanup antes de salir
             */
            try {
                if (conn != null) {
                    conn.rollback();
                    conn.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
} // main()

